package com.gzy.literature.dao;

import com.gzy.literature.entity.UserViews;
import org.apache.ibatis.annotations.*;

import java.util.List;


public interface UserViewsDao {

    /**
     * 通过ID查询单条数据
     *
     * @param userId 主键
     * @return 实例对象
     */
    @Select("SELECT * FROM user_views WHERE user_id = #{userId}")
    UserViews queryById(Integer userId);

    /**
     * 查询符合指定条件的数据（可能用于分页或动态查询）
     *
     * @param userViews 查询条件（可以为空，用于动态查询）
     * @return 对象列表
     */
    @Select("<script>" +
            "SELECT * FROM user_views WHERE 1=1 " +
            "<if test='userViews.userId != null'> AND user_id = #{userViews.userId} </if>" +
            "<if test='userViews.workId != null'> AND work_id = #{userViews.workId} </if>" +
            "<if test='userViews.viewTime != null'> AND view_time = #{userViews.viewTime} </if>" +
            // 可以添加更多查询条件
            "</script>")
    List<UserViews> queryEll(@Param("userViews") UserViews userViews);

    /**
     * 统计符合指定条件的总行数（用于分页等场景）
     *
     * @param userViews 查询条件（可以为空，用于动态查询）
     * @return 总行数
     */
    @Select("<script>" +
            "SELECT COUNT(*) FROM user_views WHERE 1=1 " +
            "<if test='userViews.userId != null'> AND user_id = #{userViews.userId} </if>" +
            "<if test='userViews.workId != null'> AND work_id = #{userViews.workId} </if>" +
            "<if test='userViews.viewTime != null'> AND view_time = #{userViews.viewTime} </if>" +
            // 可以添加更多统计条件
            "</script>")
    long countByCondition(@Param("userViews") UserViews userViews);

    /**
     * 新增数据
     *
     * @param userViews 实例对象
     * @return 影响行数
     */
    @Insert("INSERT INTO user_views(user_id, work_id, view_time) VALUES(#{userId}, #{workId}, #{viewTime})")
    @Options(useGeneratedKeys = true, keyProperty = "userId") // 注意：这里假设userId是自增主键，如果不是请根据实际情况调整
    int insert(UserViews userViews);

    /**
     * 修改数据
     * 注意：此处的更新逻辑应该更加完整，考虑所有可能的字段更新
     *
     * @param userViews 实例对象（包含要更新的字段）
     * @return 影响行数
     */
    @Update({
            "<script>",
            "UPDATE user_views ",
            "<set>",
            "<if test='userId != null'>user_id = #{userId},</if>",
            "<if test='workId != null'>work_id = #{workId},</if>",
            "<if test='viewTime != null'>view_time = #{viewTime},</if>",
            "</set>",
            "WHERE user_id = #{userId}",
            "</script>"
    })
    int update(UserViews userViews);

    /**
     * 通过主键删除数据
     *
     * @param userId 主键
     * @return 影响行数
     */
    @Delete("DELETE FROM user_views WHERE user_id = #{userId}")
    int deleteById(Integer userId);

}